#!/bin/bash
# version: 1.3
# date: 2023/01/26
# 依赖包: bc
# 安装命令: sudo pacman -S bc

# 调用函数,必须先定义网卡$eth
get_bytes(){
    # 获取当前时刻网口接收与发送的流量
    RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
    TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')

    # 获取几秒后网口接收与发送的流量
    sleep $sleeptime
    RXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
    TXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')

    # 获取这几秒钟实际的进出流量
    RX=$((${RXnext}-${RXpre}))
    TX=$((${TXnext}-${TXpre}))

    # 定义的原因和 间隔秒数、每间隔多少秒有多少字节传输 相关
    numbermbb=`echo | awk "{print $sleeptime*1024*1024}"`
    
    # 判断接收流量如果大于MB数量级则显示MB单位,否则显示KB数量级
    if [[ $RX -gt $numbermbb ]];then
        # RESULT=`echo "scale=2; $RX/$numbermbb" | bc`
        RESULT=`echo $RX $numbermbb|awk '{printf ("%.2f\n", $1/$2)}'`
        RX=$(echo $RESULT MB/s)
    else
        # RESULT=`echo "scale=2; $RX/1024" | bc`
        RESULT=`echo $RX|awk '{printf ("%.2f\n", $1/1024)}'`
        RX=$(echo $RESULT KB/s)
    fi
    
    # 判断发送流量如果大于MB数量级则显示MB单位,否则显示KB数量级
    if [[ $TX -gt $numbermbb ]];then
        # RESULT=`echo "scale=2; $TX/$numbermbb" | bc`
        RESULT=`echo $TX $numbermbb|awk '{printf ("%.2f\n", $1/$2)}'`
        TX=$(echo $RESULT MB/s)
    else
        # RESULT=`echo "scale=2; $TX/1024" | bc`
        RESULT=`echo $TX|awk '{printf ("%.2f\n", $1/1024)}'`
        TX=$(echo $RESULT KB/s)
    fi

}

end_display(){
    if [ $xxx -eq 1 ]; then
        # 输出样式 (下行流量 | 上行流量| wifi名\网卡名)
        echo_text=" $RX |  $TX | $eth"
    elif [ $xxx -eq 2 ]; then
        # 输出样式 (wifi名\网卡名)
        echo_text="$eth"
    elif [ $xxx -eq 3 ]; then
        # 输出样式 (下行流量 | 上行流量)
        echo_text=" $RX |  $TX"
    fi
}

update() {
    icon_color="^c#000080^^b#3870560x88^"
    text_color="^c#000080^^b#3870560x99^"

    wifi_icon="褐"

case $1 in
    "wifi")
    get_lang_zh=`echo $LANG|grep 'zh_CN'|wc -l`
    get_lang_en=`echo $LANG|grep 'en_US'|wc -l`

    if [ $get_lang_zh -eq 1 ]; then
	    #echo "zh_CN"
        wifi_text=$(nmcli | grep 已连接 | awk '{print $NF}')
    elif [ $get_lang_en -eq 1 ];then
	    #echo "en_US"
        wifi_text=$(nmcli | grep "connected to" | awk '{print $NF}')
    fi

    if [ "$wifi_text" != "" ]; then
        eth=$networkWifi && get_bytes
        xxx=$2 && eth=$wifi_text && end_display
    fi
    ;;
    "eth")
        eth=$networkEth && get_bytes
        xxx=$2 && end_display
    ;;
esac

    icon="$wifi_icon"
    text="$echo_text"

    echo "$icon_color $icon $text_color$text"
    #echo "$text_color $text"
}

# === main ===

# 定义无线网卡名
networkWifi=wlan0
# 定义有线网卡名
networkEth=enp2s0f0
# 定义计算的睡眠时间(s)【可以设置 1s 0.5s】
sleeptime=1

# $1 确定使用网卡 (wifi eth)
# $2 确定显示样式
## 1 (下行流量 | 上行流量| wifi名\网卡名)
## 2 (wifi名\网卡名)
## 3 (下行流量 | 上行流量)
update wifi 3

